// https://leetcode.cn/problems/happy-number/

// 题干:编写一个算法来判断一个数 n 是不是快乐数。
//      「快乐数」 定义为：
//      对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
//      然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
//      如果这个过程 结果为 1，那么这个数就是快乐数。
//      如果 n 是 快乐数 就返回 true ；不是，则返回 false 。

// 示例:输入：n = 19
//      输出：true

// 碎语:有两种情况，一种循环，但不出现1，另一种出现1，也能看成一个循环
//      成环就考虑快慢指针，判断相遇的时候两数是否为1得出答案

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int bitSums(int n)
    {
        int ret = 0;

        while (n > 0){
            int tmp = n % 10;
            ret += pow(tmp, 2);
            n /= 10;
        }
        return ret;
    }

    bool isHappy(int n)
    {
        int slow = n, fast = bitSums(n); // 以是否相同为标准，因此不能都取第一个点

        while (slow != fast){
            slow = bitSums(slow);
            fast = bitSums(bitSums(fast)); // 跳出固定思维，直接用bitSums函数来移动指针
        }

        return slow == 1;
    }
};

int main()
{
    Solution sol;
    int n;

    cin >> n;
    cout << sol.isHappy(n) << endl;

    return 0;
}